home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / sbin / restore-tar < prev    next >
Text File  |  2005-10-18  |  6KB  |  236 lines

  1. #! /bin/sh
  2. # This program is part of GNU tar
  3. # Copyright 2004, Free Software Foundation
  4. #
  5. # This program is free software; you can redistribute it and/or modify
  6. # it under the terms of the GNU General Public License as published by
  7. # the Free Software Foundation; either version 1, or (at your option)
  8. # any later version.
  9. #
  10. # This program is distributed in the hope that it will be useful,
  11. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. # GNU General Public License for more details.
  14. #
  15. # You should have received a copy of the GNU General Public License
  16. # along with this program; if not, write to the Free Software
  17. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  18. # 02111-1307, USA.
  19.  
  20. # Load library routines
  21. SYSCONFDIR=${SYSCONFDIR-/etc}
  22. . ${LIBDIR-/usr/sbin}/backup.sh
  23.  
  24. usage() {
  25.         cat - <<EOF
  26. usage: $PROGNAME [OPTIONS] [PATTERN [PATTERN...]]
  27. Options are:
  28.  
  29.    -a, --all               Restore all filesystems.
  30.    -l, --level=LEVEL       Start restoring from the given backup LEVEL
  31.                            (default $DUMP_LEVEL).
  32.    -v, --verbose[=LEVEL]   Set verbosity level. Default 100.
  33.  
  34. Informational options:   
  35.    -h, --help              Display this help message.
  36.    -L, --license           Display program license.
  37.    -V, --version           Display program version.
  38.  
  39. Send bug reports to bug-tar@gnu.org.
  40. EOF
  41. }
  42.  
  43. unset PATTERN
  44. DUMP_LEVEL=0
  45. CMDLINE="$0 $@"
  46.  
  47. for opt
  48. do
  49.   if [ -z "$prev" ]; then
  50.       option=$opt
  51.       optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
  52.   else
  53.       option="${prev}=$opt"
  54.       prev=""
  55.       optarg=$opt
  56.   fi
  57.   case $option in
  58.   -a|--a|--al|--all)
  59.      RESTORE_ALL=1
  60.      ;;
  61.   --l=*|--le=*|--lev=*|--leve=*|--level=*)
  62.          DUMP_LEVEL=$optarg
  63.      ;;
  64.   -l|--l|--le|--lev|--leve|--level)
  65.          prev=$option
  66.      ;;
  67.   --verb=*|--verbo=*|--verbos=*|--verbose=*)
  68.          VERBOSE=$optarg
  69.      ;;
  70.   -v|--verb|--verbo|--verbos|--verbose)
  71.          VERBOSE=100
  72.      ;;
  73.   -v*)   VERBOSE=`expr $option : "-v\(.*\)"`;;
  74.   -V|--v|--ve|--ver|--vers|--versi|--versio|--version)
  75.          echo "restore (tar 1.15.1)"
  76.      exit 0;;
  77.   -L|--li|--lic|--lice|--licen|--licens|--license)
  78.          license
  79.       exit;;
  80.   -h|--h|--he|--hel|--help)
  81.      usage
  82.      exit;;
  83.   -*) bailout "Unknown option $opt. Try $PROGNAME --help for more info.";;
  84.   *)  if [ -z "$PATTERN" ]; then
  85.          PATTERN=$opt
  86.       else  
  87.          PATTERN="$PATTERN|$opt"
  88.       fi
  89.       ;;
  90.   esac    
  91. done    
  92.  
  93. if [ -z "$RESTORE_ALL" ]; then
  94.     if [ -z "$PATTERN" ]; then
  95.         usage
  96.         exit;
  97.     fi
  98. fi    
  99.  
  100. init_restore
  101. cat > $LOGFILE <<EOF
  102. This file contains any messages produced by $PROGNAME.
  103.  
  104. It was created by GNU $PROGNAME, from  tar (1.15.1).
  105. Invocation command line was
  106.  
  107.   \$ $CMDLINE
  108.   
  109. EOF
  110.  
  111. restore_fs()
  112. {
  113.     fs="`echo \"${1}\" | sed -e 's/^.*://'`"
  114.     fsname="`echo \"${1}\" | sed -e 's/\//:/g'`"
  115.     remotehost="`expr \"${1}\" : '\([^/][^/]*\):.*'`"
  116.     if [ -z "$remotehost" ]; then
  117.     remotehost=$localhost
  118.     fi
  119.     message 10 "fs=$fs"
  120.     message 10 "fsname=$fsname"
  121.     message 10 "remotehost=$remotehost"
  122.  
  123.     LOGPAT="`level_log_name ${fsname} '[0-9]'`"
  124.     PREFIX="`level_log_name ${fsname} ''`"
  125.     message 10 LOGPAT=$LOGPAT
  126.     message 10 PREFIX=$PREFIX
  127.     LEVELS=`remote_run "${remotehost}" ls $LOGPAT |
  128.       sed "s,$PREFIX,," | sort -n`
  129.     message 10 "LEVELS=$LEVELS"
  130.  
  131.     echo "Starting restore of ${1} at level $DUMP_LEVEL."
  132.     for level in $LEVELS
  133.     do
  134.       if [ $level -lt $DUMP_LEVEL ]; then
  135.       message 10 "Skipping level $level"
  136.       continue;
  137.       fi
  138.       message 10 "Restoring level $level"
  139.  
  140.       DATE=`get_dump_time $level`
  141.       FILE="`level_log_name ${fsname} ${level}`"
  142.       message 10 "FILE=$FILE"
  143.       
  144.       LABEL="`print_level $level` backup of ${fs} on ${remotehost} at ${DATE}"
  145.       ${RESTORE_BEGIN-:} $level $remotehost $fs $fsname
  146.       backup_host ${remotehost} \
  147.                   "--listed=\"$FILE\"" \
  148.                   "--label=\"$LABEL\"" \
  149.           -C ${ROOT_FS-/}$fs
  150.       ${RESTORE_END-:} $level $remotehost $fs $fsname           
  151.     done
  152. }
  153.  
  154. restore_files()
  155. {
  156.     LOGPAT="`level_log_name MISC '[0-9]'`"
  157.     PREFIX="`level_log_name MISC ''`"
  158.     message 10 LOGPAT=$LOGPAT
  159.     message 10 PREFIX=$PREFIX
  160.     LEVELS=`remote_run "${localhost}" ls $LOGPAT | sed "s,$PREFIX,," | sort -n`
  161.     message 10 "LEVELS=$LEVELS"
  162.  
  163.     echo "Starting restore of miscellaneous files at level $DUMP_LEVEL."
  164.     for level in $LEVELS
  165.     do
  166.       if [ $level -lt $DUMP_LEVEL ]; then
  167.       message 10 "Skipping level $level"
  168.       continue;
  169.       fi
  170.       message 10 "Restoring level $level"
  171.       
  172.       DATE=`get_dump_time $level`
  173.       FILE="`level_log_name MISC ${level}`"
  174.       message 10 "FILE=$FILE"
  175.       
  176.       LABEL="`print_level $level` backup of miscellaneous files at ${DATE}"
  177.       ${RESTORE_BEGIN-:} $level $localhost MISC MISC
  178.       backup_host ${localhost} \
  179.                   "--listed=\"$FILE\"" \
  180.                   "--label=\"$LABEL\"" \
  181.           -C ${ROOT_FS-/} $@
  182.       ${RESTORE_END-:} $level $localhost MISC MISC
  183.     done
  184. }
  185.  
  186. # Operation Overwiew:
  187. #
  188. # 1. Determine the time of the last backup
  189. # 2. Create list of incremental listings to process
  190. # 3. For each filesystem:
  191. #  3.1. Start at the requested dump level (default 0) and proceed up to
  192. #       the last available level:
  193. #   3.1.1 Deduce the volume label
  194. #   3.1.2. Invoke [rsh] tar --listed=FILE --label=LABEL [opts] -xf $TAPE_FILE
  195. # 4. End
  196.  
  197. (message 1 "Preparing for restore"
  198.  
  199. message 1 "processing backup directories"
  200.  
  201. for dir in ${BACKUP_DIRS}
  202. do
  203.     message 1 "Processing $dir"
  204.     case $dir in
  205.     ${PATTERN-*}) restore_fs $dir;;
  206.     esac
  207. done
  208.  
  209. if [ "x${BACKUP_FILES}" != "x" ] ; then
  210.     message 1 "processing miscellaneous files"
  211.     if [ -z "$PATTERN" ]; then
  212.     restore_files
  213.     else
  214.     RESTORE_FILES=""
  215.     for file in ${BACKUP_FILES}
  216.     do
  217.       rel_file=`expr $file : '/\(.*\)'`
  218.       case $file in
  219.           $PATTERN) if [ -z "$RESTORE_FILES" ]; then
  220.                        RESTORE_FILES="$rel_file"
  221.                 else
  222.                    RESTORE_FILES="$RESTORE_FILES $rel_file"
  223.                 fi;;
  224.       esac
  225.     done
  226.     [ -z "$RESTORE_FILES" ] || restore_files $RESTORE_FILES
  227.     fi
  228.         
  229. fi) 2>&1 | tee -a "${LOGFILE}"
  230.  
  231. # EOF    
  232.  
  233.     
  234.     
  235.           
  236.